#include<iostream>
#include<string>
using namespace std;
int dp[1005][1005];
string str1, str2;
int dp1[1005];
//int LCS()
//{
//	memset(dp, 0, sizeof(dp));
//	for (int i = 1; i <= str1.size(); i++)
//		for (int j = 1; j <= str2.size(); j++) {
//			if (str1[i - 1] == str2[j - 1])
//				dp[i][j] = dp[i - 1][j - 1] + 1;
//			else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
//		}
//	return dp[str1.size()][str2.size()];
//}

int LCS()
{
	memset(dp1, 0, sizeof(dp1));
	for (int i = 1; i <= str1.size(); i++) {
		int tmp = 0;
		for (int j = 1; j <= str2.size(); j++) {
			if (str1[i - 1] == str2[j - 1]) {
				int tmp1 = dp1[j];
				dp1[j] = tmp + 1;
				tmp = tmp1;
			}
			else {
				tmp = dp1[j];
				dp1[j] = max(dp1[j], dp1[j - 1]);
			}
		}
	}
	return dp1[str2.size()];
}

void PrintSolution()
{
	string st;
	int i = str1.size(), j = str2.size();
	while (i > 0 && j > 0) {
		if (str1[i - 1] == str2[j - 1]) {
			st.push_back(str1[i - 1]);
			--i, --j;
		}
		else if (dp[i][j] == dp[i - 1][j])--i;
		else --j;
	}
	for (i = st.size() - 1; i >= 0; i--)cout << st[i];
	cout << endl;
}

int main()
{
	while (cin >> str1 >> str2) {
		cout << LCS() << endl;
		//PrintSolution();
	}
	return 0;
}